package com.swak.annotation;

import java.lang.annotation.ElementType;
import java.lang.annotation.Retention;
import java.lang.annotation.RetentionPolicy;
import java.lang.annotation.Target;

import org.springframework.core.annotation.AliasFor;

import com.swak.utils.StringUtils;

/**
 * 定义全局事务
 * 
 * @author DELL
 */
@Retention(RetentionPolicy.RUNTIME)
@Target({ElementType.FIELD, ElementType.METHOD })
@Consistency
public @interface Tcc {

	/**
	 * @return 配置一致性的方案， 默认是Tcc 的模式
	 */
	@AliasFor(annotation = Consistency.class)
	ConsistencyScheme scheme() default ConsistencyScheme.TCC;
	
	/**
	 * @return 一致性的传播级别， 默认需要一个事务
	 */
	@AliasFor(annotation = Consistency.class)
	Propagation propagation() default Propagation.REQUIRED;

	/**
	 * 指明TCC的confirm方法，具备幂等性
	 * 
	 * @return string
	 */
	String confirm() default StringUtils.EMPTY;

	/**
	 * 指明TCC的cancel方法，具备幂等性
	 * 
	 * @return
	 */
	String cancel() default StringUtils.EMPTY;

}